package cheme.ProcessModel.Visitors;

import cheme.ProcessModel.IChild;
import cheme.ProcessModel.IParent;
import cheme.ProcessModel.ProcessModel;
import cheme.ProcessModel.Annotations.Annotation;
import cheme.ProcessModel.Equations.Equation;
import cheme.ProcessModel.Equations.EquationField;
import cheme.ProcessModel.Equations.EquationList;
import cheme.ProcessModel.Equations.EquationPalette;
import cheme.ProcessModel.Equations.EquationPaletteField;
import cheme.ProcessModel.Equations.Equations;
import cheme.ProcessModel.Equations.OperatorField;
import cheme.ProcessModel.ProcessUnits.Mixer;
import cheme.ProcessModel.ProcessUnits.ProcessUnit;
import cheme.ProcessModel.ProcessUnits.Separator;
import cheme.ProcessModel.ProcessUnits.SplitJoin;
import cheme.ProcessModel.ProcessUnits.TerminalSink;
import cheme.ProcessModel.ProcessUnits.TerminalSource;
import cheme.ProcessModel.ProcessUnits.Streams.Stream;
import cheme.ProcessModel.ProcessUnits.Streams.Tags.LabelField;
import cheme.ProcessModel.ProcessUnits.Streams.Tags.MaterialField;
import cheme.ProcessModel.ProcessUnits.Streams.Tags.OverallTagComponent;
import cheme.ProcessModel.ProcessUnits.Streams.Tags.OverallUnitsField;
import cheme.ProcessModel.ProcessUnits.Streams.Tags.QuantityField;
import cheme.ProcessModel.ProcessUnits.Streams.Tags.Tag;
import cheme.ProcessModel.ProcessUnits.Streams.Tags.TagComponent;
import cheme.ProcessModel.ProcessUnits.Streams.Tags.TagComponentList;
import cheme.ProcessModel.Subprocess.Subprocess;
import cheme.ProcessModel.Table.Field;

public interface IModelVisitor extends IVisitorPatternElement
{
	public class ModelVisitorStub implements IModelVisitor
	{

		public Object visit(IParent modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(IChild modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(Annotation modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(ProcessModel modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(Equation modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(EquationField modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(EquationList modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(EquationPalette modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(EquationPaletteField modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(Equations modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(OperatorField modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(ProcessUnit modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(Mixer modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(Separator modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(SplitJoin modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(TerminalSink modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(TerminalSource modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(Stream modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(Field modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(LabelField modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(MaterialField modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(OverallTagComponent modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(OverallUnitsField modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(QuantityField modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(Tag modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(TagComponent modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(TagComponentList modelElement)
		{
			return IModelVisitor.NullReturn;
		}

		public Object visit(Subprocess modelElement)
		{
			return IModelVisitor.NullReturn;
		}
		
	}
	
	Object visit(IParent modelElement);
	Object visit(IChild modelElement);
	Object visit(Annotation modelElement);
	Object visit(ProcessModel modelElement);

	Object visit(Equation modelElement);
	Object visit(EquationField modelElement);
	Object visit(EquationList modelElement);
	Object visit(EquationPalette modelElement);
	Object visit(EquationPaletteField modelElement);
	Object visit(Equations modelElement);
	Object visit(OperatorField modelElement);

	Object visit(ProcessUnit modelElement);
	Object visit(Mixer modelElement);
	Object visit(Separator modelElement);
	Object visit(SplitJoin modelElement);
	Object visit(TerminalSink modelElement);
	Object visit(TerminalSource modelElement);

	Object visit(Stream modelElement);

	Object visit(Field modelElement);
	Object visit(LabelField modelElement);
	Object visit(MaterialField modelElement);
	Object visit(OverallTagComponent modelElement);
	Object visit(OverallUnitsField modelElement);
	Object visit(QuantityField modelElement);
	Object visit(Tag modelElement);
	Object visit(TagComponent modelElement);
	Object visit(TagComponentList modelElement);
	
	Object visit(Subprocess modelElement);
}